<?php
/* 
* [分类管理模型]
* @author: mazhenyu[houdunwangmzy@163.com]
* @Date:   2014-06-16 17:02:35
* @Last Modified time: 2014-06-24 09:02:23
*/
class CategoryModel extends Model{
	public $table = 'category';
	//保存所有分类缓存的属性
	public $allCate;

	public function __init(){
		//读取缓存
		$this->allCate = S('allCate',false,0,array('dir'=>CACHE_PATH));
	}

	public $validate = array(
		array('cname','nonull','分类名称不能为空',2,3),
		array('cname','maxlen:20','分类名称不能超过20个字符',2,3),
		array('ctitle','nonull','分类标题不能为空',2,3),
		array('ctitle','maxlen:60','分类标题不能超过60个字符',2,3),

		);
	/**
	 * [update_cache 更新缓存]
	 * @return [type] [description]
	 */
	public function update_cache(){
		$data = $this->all();
		S('allCate',$data,0,array('dir'=>CACHE_PATH));
	}
	/**
	 * [add_data 添加分类]
	 */
	public function add_data(){
		$this->add();
		//更新缓存
		$this->update_cache();
	}

	/**
	 * [get_all 获得所有数据]
	 * @return [type] [description]
	 */
	public function get_all($field=NULL,$where=null){
		return $this->field($field)->where($where)->all();
	}
	/**
	 * [get_one 获得一条数据]
	 * @param  [type] $where [where条件]
	 * @param  [type] $field [指定字段]
	 * @return [type]        [description]
	 */
	public function get_one($where,$field=NULL){
		return $this->where($where)->field($field)->find();
	}

	/**
	 * [update_stat 修改状态，包括1.列表静态2.内容静态3.是否显示]
	 * @return [type] [description]
	 */
	public function update_stat($cid=0){
		// array(
		// 	'cid'	=>	5,
		// 	'type'	=>	'list',
		// 	'switch'=>	'on'
		// 	)

		//主键cid
		$cid = Q('post.cid', 0, 'intval');
		//类型
		$type = Q('post.type');
		//开关
		$switch = Q('post.switch') == 'on' ? 1 : 0;

		switch ($type) {
			case 'list':
				$data = array('is_listhtml'	=>	$switch);
				break;
			case 'arc':
				$data = array('is_archtml'	=>	$switch);
				break;
			case 'show':
				$data = array('is_show'	=>	$switch);
				break;
		}
		//修改数据
		$this->where(array('cid' =>	$cid))->save($data);
		//更新缓存
		$this->update_cache();
	}

	/**
	 * [del 删除分类]
	 * @return [type] [description]
	 */
	public function del_cate(){
		$cid = Q('get.cid', 0, 'intval');
		//判断是否有子级
		$sonId = $this->where(array('pid'=>$cid))->getField('cid');
		if($sonId){
			$this->error = '请先删除该分类下面的子分类';
			return false;
		}
		//判断有没有文章
		if(K('Article')->cate_hava_arc($cid)){
			$this->error = '请先删除该分类下面文章';
			return false;
		}
		//如果没有则删除
		$this->where(array('cid'=>$cid))->delete();
		//更新缓存
		$this->update_cache();
		return true;
	}

	/**
	 * [get_choose_cate 查询可以选择的分类]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_choose_cate($cid){
		//1.获得自己和自己子级的分类id
		//分类全部数据
		$cate = $this->all();
		$sonCidArr = $this->get_son_id($cate,$cid);
		$sonCidArr[] = $cid;
		//2.不在自己和子级分类id的数组重新压入一个新数组，也就是可以选择的分类
		$tempArr = array();
		foreach ($cate as $v) {
			if(!in_array($v['cid'], $sonCidArr)){
				$tempArr[] = $v;
			}
		}
		return $tempArr;

	}
	/**
	 * [get_son_id 获得自己和自己子级的分类id]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_son_id($cate,$cid){
		$tempArr = array();
		foreach ($cate as $v) {
			if($cid == $v['pid']){
				$tempArr[] = $v['cid'];
				$tempArr = array_merge($tempArr,$this->get_son_id($cate,$v['cid']));
			}
		}
		return $tempArr;
	}

	/**
	 * [update_data 修改分类]
	 * @return [type] [description]
	 */
	public function update_data(){
		//如果Post数据有主键则不用写where条件
		$this->save();
		//更新缓存
		$this->update_cache();
		//直接写where条件写法
		// $this->where(array('cid'=>Q('post.cid', 0, 'intval')))->save();
	}


	public function get_field($cid,$field){
		return $this->where(array('cid'=>$cid))->getField($field);
	}
}


